/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

// 等待 Cordova 环境就绪
document.addEventListener('deviceready', onDeviceReady, false);

function onDeviceReady() {
    console.log('Cordova 环境已就绪，可监听电池状态');
    
    // 初始化页面显示
    document.getElementById('batteryLevel').textContent = '电量：获取中...';
    document.getElementById('chargeStatus').textContent = '充电状态：获取中...';
    document.getElementById('timeInfo').textContent = '时间预估：获取中...';
    
    // 监听电池状态变化
    document.addEventListener('batterystatus', updateBatteryInfo, false);
    
    // 监听低电量事件
    document.addEventListener('batterylow', showLowBatteryAlert, false);

    // 监听临界电量事件
    document.addEventListener('batterycritical', showCriticalBatteryAlert, false);

    // 绑定移除监听按钮事件
    const removeListenerBtn = document.getElementById('removeListenerBtn');
    if (removeListenerBtn) {
        removeListenerBtn.addEventListener('click', function() {
            document.removeEventListener('batterystatus', updateBatteryInfo, false);
            document.removeEventListener('batterylow', showLowBatteryAlert, false);
            document.removeEventListener('batterycritical', showCriticalBatteryAlert, false);
            addEventLog('已移除所有电池状态监听', 'info');
            alert('已移除所有电池状态监听');
            this.disabled = true;
            this.textContent = '监听已移除';
        });
    }
}

// 更新电池信息显示
function updateBatteryInfo(status) {
    console.log('电池状态更新：', status);
    
    // 更新电量显示
    const levelText = `电量：${status.level}%`;
    const batteryLevelElement = document.getElementById('batteryLevel');
    if (batteryLevelElement) {
        batteryLevelElement.textContent = levelText;
        batteryLevelElement.style.color = getLevelColor(status.level);
    }

    // 更新充电状态显示
    const chargeText = status.isPlugged ? '正在充电' : '未充电';
    const chargeStatusElement = document.getElementById('chargeStatus');
    if (chargeStatusElement) {
        const chargeIndicator = document.createElement('span');
        chargeIndicator.className = `charge-indicator ${status.isPlugged ? 'charging' : 'not-charging'}`;
        chargeStatusElement.innerHTML = '';
        chargeStatusElement.appendChild(chargeIndicator);
        chargeStatusElement.appendChild(document.createTextNode(`充电状态：${chargeText}`));
    }

    // 更新时间预估显示
    let timeText = '无法获取时间预估';
    if (status.isPlugged && status.chargingTime !== null && status.chargingTime >= 0) {
        const hours = Math.floor(status.chargingTime / 3600);
        const minutes = Math.floor((status.chargingTime % 3600) / 60);
        timeText = `预计充满时间：${hours > 0 ? hours + '小时' : ''}${minutes}分钟`;
    } else if (!status.isPlugged && status.dischargingTime !== null && status.dischargingTime >= 0) {
        const hours = Math.floor(status.dischargingTime / 3600);
        const minutes = Math.floor((status.dischargingTime % 3600) / 60);
        timeText = `预计剩余使用时间：${hours > 0 ? hours + '小时' : ''}${minutes}分钟`;
    }

    const timeInfoElement = document.getElementById('timeInfo');
    if (timeInfoElement) {
        timeInfoElement.textContent = timeText;
    }

    // 添加事件日志
    addEventLog(`电池状态更新：${status.level}%，${chargeText}`, 'status');
}

// 根据电量获取显示颜色（绿色→黄色→红色）
function getLevelColor(level) {
    if (level >= 60) return '#4CAF50'; // 绿色
    if (level >= 20) return '#FFC107'; // 黄色
    return '#F44336'; // 红色
}

// 显示低电量提醒
function showLowBatteryAlert(status) {
    console.log('低电量提醒：当前电量', status.level + '%');
    addEventLog(`低电量提醒：${status.level}%`, 'warning');
    
    const message = `当前电池电量较低（${status.level}%），建议及时充电，避免影响使用。`;
    
    // 尝试使用 notification API，如果不可用则使用原生 alert
    if (typeof navigator !== 'undefined' && navigator.notification && navigator.notification.alert) {
        navigator.notification.alert(
            message,
            function() {
                // 降低屏幕亮度（仅 Android 支持，需额外插件）
                if (typeof cordova !== 'undefined' && cordova.platformId === 'android' && typeof cordova.plugins !== 'undefined' && cordova.plugins.brightness) {
                    cordova.plugins.brightness.setBrightness(0.5);
                }
            },
            '低电量提醒',
            '知道了'
        );
    } else {
        alert(message);
    }
}

// 显示临界电量警告
function showCriticalBatteryAlert(status) {
    console.log('临界电量警告：当前电量', status.level + '%');
    addEventLog(`临界电量警告：${status.level}%`, 'critical');
    
    // 自动保存数据
    saveUserData().then(function() {
        const message = `紧急提醒：当前电池电量已不足${status.level}%，设备即将关机！请立即充电。`;
        
        // 尝试使用 notification API，如果不可用则使用原生 confirm
        if (typeof navigator !== 'undefined' && navigator.notification && navigator.notification.confirm) {
            navigator.notification.confirm(
                message,
                function(buttonIndex) {
                    if (buttonIndex === 1) {
                        // 跳转至系统电池设置页面（Android）
                        if (typeof cordova !== 'undefined' && cordova.platformId === 'android' && typeof cordova.plugins !== 'undefined' && cordova.plugins.settings) {
                            cordova.plugins.settings.open('battery', function() {}, function(err) {
                                console.error('打开电池设置失败：', err);
                            });
                        }
                    }
                },
                '电池电量紧急警告',
                ['立即充电', '稍后处理']
            );
        } else {
            if (confirm(message + '\n\n点击"确定"表示立即充电，点击"取消"表示稍后处理')) {
                // 可以在这里添加跳转逻辑
                console.log('用户选择立即充电');
            }
        }
    });
}

// 模拟保存用户数据
function saveUserData() {
    return new Promise(function(resolve) {
        console.log('正在自动保存用户数据...');
        addEventLog('正在自动保存用户数据...', 'info');
        // 实际项目中可添加 localStorage 存储、API 同步等逻辑
        setTimeout(function() {
            console.log('用户数据保存完成');
            addEventLog('用户数据保存完成', 'success');
            resolve();
        }, 800);
    });
}

// 添加事件日志
function addEventLog(message, type) {
    const eventLogContent = document.getElementById('eventLogContent');
    if (!eventLogContent) return;
    
    const eventItem = document.createElement('div');
    eventItem.className = 'event-item';
    
    const timestamp = new Date().toLocaleTimeString();
    const typeIcon = {
        'status': '📊',
        'warning': '⚠️',
        'critical': '🚨',
        'info': 'ℹ️',
        'success': '✅'
    }[type] || '📝';
    
    eventItem.textContent = `[${timestamp}] ${typeIcon} ${message}`;
    
    // 插入到最前面
    eventLogContent.insertBefore(eventItem, eventLogContent.firstChild);
    
    // 限制日志数量（最多保留20条）
    while (eventLogContent.children.length > 20) {
        eventLogContent.removeChild(eventLogContent.lastChild);
    }
}

// 页面加载完成后的初始化
document.addEventListener('DOMContentLoaded', function() {
    console.log('电池状态页面加载完成');
    
    // 如果不在 Cordova 环境中，显示提示
    if (typeof cordova === 'undefined') {
        console.log('检测到浏览器环境，电池状态功能需要在设备上测试');
        addEventLog('检测到浏览器环境，电池状态功能需要在设备上测试', 'info');
    }
});

